home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / ARCHIVE / V12N10.ZIP;1 / VERBOS.ZIP / VERBOSMB.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1992-11-27  |  2.7 KB  |  78 lines

  1. Unit VerbosMB;             {By Kurt Herzog, 06/10/92 vers:10/28/92}
  2.                            {A unit to facilitate wordy MessageBoxes}
  3. {$IFDEF PRODUCTION}
  4.   {$R-}                    {No range checking}
  5.   {$S-}                    {No Stack checking}
  6.   {$D-}                    {No debug data}
  7.   {$L-}                    {No Local debug symbols}
  8. {$ENDIF}
  9. {$X+}
  10.  
  11. (**) INTERFACE (**)
  12.  
  13. USES
  14.   Strings,                      {Nul-terminated string support}
  15.   WinTypes,                     {All standard Windows types}
  16.   WinProcs;                     {Defines Func/Proc headers for API}
  17.  
  18.   FUNCTION VerboseMessage
  19.             (hParent  : HWnd;     {Parent Window handle}
  20.              First,               {ID of first string (box title)}
  21.              Last     : word;     {ID of last string in series}
  22.              VAR ArgList;         {table of wvsPrintf arguments}
  23.              mbConst  : word)     {mb_constants}
  24.                       : integer;  {returns mb_response or -1}
  25.                                   {if unable to allocate memory}
  26.  
  27.   (**) IMPLEMENTATION (**)
  28.  
  29.   FUNCTION VerboseMessage (hParent : HWnd; First, Last : word;
  30.                            VAR ArgList; mbConst : word) : integer;
  31.   TYPE
  32.     PBuffer      = ^TBuffer;
  33.     TBuffer      = RECORD
  34.       Area1      : ARRAY[0..1023] OF Char; {Max size for wvsPrintf}
  35.       Area2      : ARRAY[0..1023] OF Char;
  36.     END;
  37.   VAR
  38.     WorkBuffer   : PBuffer;
  39.     Maintext     : PChar;
  40.     Stringnumber : word;
  41.     Stringsize   : Integer;
  42.   BEGIN
  43.     GetMem(WorkBuffer,SizeOf(TBuffer));
  44.     IF WorkBuffer = nil THEN
  45.       BEGIN
  46.         VerboseMessage := -1;
  47.         Exit;
  48.       END;
  49.     WITH WorkBuffer^ DO
  50.       BEGIN
  51.         Area2[0] := Chr(0); {Init to no data}
  52.         FOR Stringnumber := First TO Last DO
  53.           BEGIN
  54.             Stringsize := LoadString(HInstance, Stringnumber,
  55.                           Area1, SizeOf(Area1)-1);
  56.             IF Stringsize <> 0 THEN {Ignore missing string numbers}
  57.               BEGIN
  58.                 StrLCat(Area2, Area1, SizeOf(Area2)-1);
  59.                 StrLCat(Area2, Chr(13), SizeOf(Area2)-1); {CR @ end}
  60.               END;
  61.           END;
  62.         {Edit in any argument parameters}
  63.         wvsPrintf(Area1, Area2, ArgList);
  64.         {Replace 1st CR with null to terminate box title,}
  65.         {then set main text pointer to data following box title}
  66.         Maintext := StrScan(Area1, Chr(13));
  67.         IF Maintext <> nil THEN
  68.           BEGIN
  69.             Maintext[0] := Chr(0);
  70.             Maintext := @Maintext[1];
  71.           END;
  72.         VerboseMessage := MessageBox(hParent, Maintext, Area1,
  73.           mbConst);
  74.         FreeMem(WorkBuffer,SizeOf(TBuffer));
  75.       END;
  76.   END;
  77.  
  78. END.